package co.edu.usbcali.unidades.presentation.backingBeans;

import co.edu.usbcali.unidades.exceptions.*;
import co.edu.usbcali.unidades.modelo.*;
import co.edu.usbcali.unidades.modelo.dto.AutorizacionDTO;
import co.edu.usbcali.unidades.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.unidades.utilities.*;

import com.icesoft.faces.async.render.RenderManager;
import com.icesoft.faces.async.render.Renderable;
import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlInputTextarea;
import com.icesoft.faces.component.ext.HtmlSelectOneRadio;
import com.icesoft.faces.component.selectinputdate.SelectInputDate;
import com.icesoft.faces.context.DisposableBean;
import com.icesoft.faces.webapp.xmlhttp.FatalRenderingException;
import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState;
import com.icesoft.faces.webapp.xmlhttp.RenderingException;
import com.icesoft.faces.webapp.xmlhttp.TransientRenderingException;

import java.math.BigDecimal;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
import java.util.Vector;

import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.DataModel;
import javax.faces.model.SelectItem;

public class AutorizacionView extends DataSource implements Renderable,
		DisposableBean {

	// para llenar el datatable en la consulta
	private HtmlSelectOneRadio radioSelecionado;
	private HtmlInputText txtNombreConsulta;

	private HtmlInputText txtAutCedVisitante;

	private HtmlInputText txtAutDescripcionActi;
	private HtmlInputText txtAutDescripcionPermi;
	private List<Autorizacion> autorizacionEncontradas;

	private HtmlInputTextarea areaDescActi;
	private HtmlInputTextarea areaDescPerm;
	private Date fechaActual = new Date();

	private HtmlInputText txtAutEmpresa;
	private HtmlInputText txtAutNombreVisitante;
	private HtmlInputText txtEstCodigo_Estado = new HtmlInputText();
	private HtmlInputText txtPriCodigo_PropietarioInmueble = new HtmlInputText();
	private HtmlInputText txtAutCodigo = new HtmlInputText();
	private SelectInputDate txtAutFecha;
	private HtmlCommandButton btnSave;
	private HtmlCommandButton btnModify;
	private HtmlCommandButton btnDelete;
	private HtmlCommandButton btnClear;

	private HtmlCommandButton btnCambiarEstado;

	private boolean renderDataTable;
	private boolean flag = true;
	private RenderManager renderManager;
	private PersistentFacesState state = PersistentFacesState.getInstance();
	private List<Autorizacion> autorizacion;
	private List<AutorizacionDTO> autorizacionDTO;

	public AutorizacionView() {
		super("");
	}
	public String action_volver() {
		action_clear();
		return "volver";
	}

	public String action_clear() {
		// getTxtAutCodigo();
		txtAutCodigo.setValue(null);
		txtAutCodigo.setDisabled(true);

		txtAutNombreVisitante.setValue(null);
		txtAutNombreVisitante.setDisabled(true);

		txtAutCedVisitante.setValue(null);
		txtAutCedVisitante.setDisabled(false);

		txtAutEmpresa.setValue(null);
		txtAutEmpresa.setDisabled(true);

		// getTxtEstCodigo_Estado();
		txtEstCodigo_Estado.setValue(null);
		txtEstCodigo_Estado.setDisabled(true);

		getTxtPriCodigo_PropietarioInmueble();
		txtPriCodigo_PropietarioInmueble.setDisabled(true);

		txtAutFecha.setValue(null);
		txtAutFecha.setDisabled(false);

		areaDescActi.setValue(null);
		areaDescActi.setDisabled(true);

		areaDescPerm.setValue(null);
		areaDescPerm.setDisabled(true);

		btnSave.setDisabled(true);
		btnModify.setDisabled(true);
		btnCambiarEstado.setDisabled(true);
		btnClear.setDisabled(false);

		return "";
	}

	public void listener_txtId(ActionEvent e) {
		try {
			String codigoPro= FacesUtils.getSession().getAttribute("codPro").toString();
			Autorizacion autorizacion = BusinessDelegatorView.buscar(FacesUtils.checkString(txtAutCedVisitante),FacesUtils.checkDate(txtAutFecha),codigoPro);

			//la autorizacion no existe
			if (autorizacion == null) {
				txtAutNombreVisitante.setDisabled(false);
				
				txtAutCodigo.setValue(action_darProximoNumero());
				txtAutCodigo.setDisabled(true);
				
				txtAutEmpresa.setDisabled(false);
				
				txtEstCodigo_Estado.setDisabled(true);
				txtEstCodigo_Estado.setValue("Activa");
				
				areaDescActi.setDisabled(false);
				areaDescPerm.setDisabled(false);
				
				txtPriCodigo_PropietarioInmueble.setDisabled(true);
				txtPriCodigo_PropietarioInmueble.setValue(FacesUtils
						.getSession().getAttribute("codPro"));
				
				
				txtAutFecha.setDisabled(false);
				
				btnSave.setDisabled(false);
				btnCambiarEstado.setDisabled(true);
				btnModify.setDisabled(true);
				btnClear.setDisabled(false);
			//la autorizacion si existe
			} else {
				//si la autorizacion fue realizada...
				if (autorizacion.getEstado().getEstCodigo().equals("5")) {
					action_clear();
					throw new Exception("La Autorizacion Ya Se Cumplio");
				}else{
				
				// la autorizacion esta inactiva
				if (autorizacion.getEstado().getEstCodigo().equals("2")) {
					
					txtAutCedVisitante.setDisabled(true);
					
					areaDescActi.setValue(autorizacion.getAutDescripcionActi());
					areaDescActi.setDisabled(true);
					
					areaDescPerm.setValue(autorizacion.getAutDescripcionPermi());
					areaDescPerm.setDisabled(true);
					
					txtAutEmpresa.setValue(autorizacion.getAutEmpresa());
					txtAutEmpresa.setDisabled(true);
				
					txtAutFecha.setDisabled(true);
					
					txtAutNombreVisitante.setValue(autorizacion
							.getAutNombreVisitante());
					
					txtAutNombreVisitante.setDisabled(true);
					if (autorizacion.getEstado().getEstCodigo().equals("1")) {
						txtEstCodigo_Estado.setValue("Activa");
					}
					if (autorizacion.getEstado().getEstCodigo().equals("2")) {
						txtEstCodigo_Estado.setValue("Cancelada");
					}
					
					txtEstCodigo_Estado.setDisabled(true);
					
					txtPriCodigo_PropietarioInmueble.setValue(autorizacion
							.getPropietarioInmueble().getPriCodigo());
					txtPriCodigo_PropietarioInmueble.setDisabled(true);
					txtAutCodigo.setValue(autorizacion.getAutCodigo());
					txtAutCodigo.setDisabled(true);
					btnSave.setDisabled(true);
					btnModify.setDisabled(true);
					btnCambiarEstado.setDisabled(false);
					btnClear.setDisabled(false);
					
					// la autorizacion esta activa
				} else {
					
					txtAutCedVisitante.setDisabled(true);
					
					areaDescActi.setValue(autorizacion.getAutDescripcionActi());
					areaDescActi.setDisabled(false);
					
					areaDescPerm.setValue(autorizacion.getAutDescripcionPermi());
					areaDescPerm.setDisabled(false);
					
					txtAutEmpresa.setValue(autorizacion.getAutEmpresa());
					txtAutEmpresa.setDisabled(false);
					
					txtAutFecha.setDisabled(false);
					
					txtAutNombreVisitante.setValue(autorizacion
							.getAutNombreVisitante());
					txtAutNombreVisitante.setDisabled(false);

					if (autorizacion.getEstado().getEstCodigo().equals("1")) {
						txtEstCodigo_Estado.setValue("Activa");
					}
					if (autorizacion.getEstado().getEstCodigo().equals("2")) {
						txtEstCodigo_Estado.setValue("Cancelada");
					}
					
					txtEstCodigo_Estado.setDisabled(true);
					
					txtPriCodigo_PropietarioInmueble.setValue(autorizacion
							.getPropietarioInmueble().getPriCodigo());
					txtPriCodigo_PropietarioInmueble.setDisabled(true);
					
					txtAutCodigo.setValue(autorizacion.getAutCodigo());
					txtAutCodigo.setDisabled(true);
					
					btnSave.setDisabled(true);
					btnModify.setDisabled(false);
					btnCambiarEstado.setDisabled(false);
					btnClear.setDisabled(false);
				}
				}
			}
		} catch (Exception e1) {
			FacesUtils.addErrorMessage(e1.getMessage());
		}
	}

	public String action_save() {
		try {
			if (fechaActual.before((Date) txtAutFecha.getValue())) {

				BusinessDelegatorView.saveAutorizacion(FacesUtils
						.checkString(txtAutCedVisitante), FacesUtils
						.checkString(txtAutCodigo), FacesUtils
						.checkString(areaDescActi), FacesUtils
						.checkString(areaDescPerm),
						// FacesUtils.checkString(txtAutEmpresa),
						txtAutEmpresa.getValue().toString(), FacesUtils
								.checkDate(txtAutFecha), FacesUtils
								.checkString(txtAutNombreVisitante), "1",
						FacesUtils
								.checkString(txtPriCodigo_PropietarioInmueble));
				FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
				action_clear();
			}

			if (fechaActual.after((Date) txtAutFecha.getValue())) {
				FacesUtils
						.addErrorMessage("No puede seleccionar una fecha del pasado");
			}

		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_delete() {
		try {
			BusinessDelegatorView.deleteAutorizacion(FacesUtils
					.checkString(txtAutCodigo));
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modify() {

		try {

			if (fechaActual.before((Date) txtAutFecha.getValue())) {
				BusinessDelegatorView.updateAutorizacion(FacesUtils
						.checkString(txtAutCedVisitante), FacesUtils
						.checkString(txtAutCodigo), areaDescActi.getValue()
						.toString(), areaDescPerm.getValue().toString(),
						FacesUtils.checkString(txtAutEmpresa), FacesUtils
								.checkDate(txtAutFecha), FacesUtils
								.checkString(txtAutNombreVisitante), "1",
						FacesUtils
								.checkString(txtPriCodigo_PropietarioInmueble));
				FacesUtils
						.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
				action_clear();
			}
			if (fechaActual.after((Date) txtAutFecha.getValue())) {
				FacesUtils
						.addErrorMessage("No puede seleccionar una fecha del pasado");
			}
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	// metodo que cambia el estado para cancelar la autorizacion.....
	public String action_cambiarEstado() {
		try {
			String codEstado = null;			
			String codigoPro= FacesUtils.getSession().getAttribute("codPro").toString();
			Autorizacion a = BusinessDelegatorView.buscar(FacesUtils.checkString(txtAutCedVisitante),FacesUtils.checkDate(txtAutFecha),codigoPro);
			if (a.getEstado().getEstCodigo().equals("1")) {
				codEstado = "2";
			}
			if (a.getEstado().getEstCodigo().equals("2")) {
				codEstado = "1";
			}
			BusinessDelegatorView.updateAutorizacion(
					a.getAutCedVisitante(),
					a.getAutCodigo(),
					a.getAutDescripcionActi(),
					a.getAutDescripcionPermi(),
					a.getAutEmpresa(),
					a.getAutFecha(),
					a.getAutNombreVisitante(),
					codEstado,
					FacesUtils.checkString(txtPriCodigo_PropietarioInmueble));
			FacesUtils.addInfoMessage("Cambio de Estado Realizado Con Exito");
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	// Metodo que trae el numero siguiente para el No. Autorizacion
	public String action_darProximoNumero() {
		String codigo = null;
		try {
			codigo = BusinessDelegatorView.darProximoNumeroAutorizacion();
			if (codigo == null) {
				codigo = "1";
			} else {
				int aux = Integer.parseInt(codigo);
				aux = aux + 1;
				codigo = aux + "";
			}

		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return codigo;
	}

	// Metodo que llena el dataTable de las autorizaciones de ese ususrio
	// consultando por Nombre.....
	public void action_consultaPorNombre_y_Usuario(ActionEvent e) {
		try {
			String txtNombCon = txtNombreConsulta.getValue().toString();

			String codProInm = FacesUtils.getSession().getAttribute("codPro")
					.toString();

			List<Autorizacion> autoEncontradas = BusinessDelegatorView
					.consultaPorNombre_y_Usuario(txtNombCon, codProInm);

			autorizacionEncontradas = new ArrayList<Autorizacion>();
			for (int i = 0; i < autoEncontradas.size(); i++) {
				Autorizacion au = new Autorizacion();
				au.setAutCedVisitante(autoEncontradas.get(i)
						.getAutCedVisitante());
				au.setAutCodigo(autoEncontradas.get(i).getAutCodigo());
				au.setAutDescripcionActi(autoEncontradas.get(i)
						.getAutDescripcionActi());
				au.setAutDescripcionPermi(autoEncontradas.get(i)
						.getAutDescripcionPermi());
				au.setAutEmpresa(autoEncontradas.get(i).getAutEmpresa());
				au.setAutFecha(autoEncontradas.get(i).getAutFecha());
				au.setAutNombreVisitante(autoEncontradas.get(i)
						.getAutNombreVisitante());
				au.setEstado(autoEncontradas.get(i).getEstado());
				au.setPropietarioInmueble(autoEncontradas.get(i)
						.getPropietarioInmueble());
				autorizacionEncontradas.add(au);
			}

		} catch (Exception e2) {
			FacesUtils.addErrorMessage(e2.getMessage());
		}
	}

	// Metodo que llena el dataTable de las autorizaciones de ese ususrio
	// consultando por Codigo.....
	public void action_consultaPorCedula_y_Usuario(ActionEvent e) {
		try {
			String txtCodCons = txtNombreConsulta.getValue().toString().trim();
			String codProInm = FacesUtils.getSession().getAttribute("codPro")
					.toString();

			List<Autorizacion> autoEncontradas = BusinessDelegatorView
					.consultaPorCedula_y_Usuario(txtCodCons, codProInm);

			autorizacionEncontradas = new ArrayList<Autorizacion>();
			// autorizacionEncontradas = autoEncontradas;
			for (int i = 0; i < autoEncontradas.size(); i++) {
				Autorizacion au = new Autorizacion();
				au.setAutCedVisitante(autoEncontradas.get(i)
						.getAutCedVisitante());
				au.setAutCodigo(autoEncontradas.get(i).getAutCodigo());
				au.setAutDescripcionActi(autoEncontradas.get(i)
						.getAutDescripcionActi());
				au.setAutDescripcionPermi(autoEncontradas.get(i)
						.getAutDescripcionPermi());
				au.setAutEmpresa(autoEncontradas.get(i).getAutEmpresa());
				au.setAutFecha(autoEncontradas.get(i).getAutFecha());
				au.setAutNombreVisitante(autoEncontradas.get(i)
						.getAutNombreVisitante());
				au.setEstado(autoEncontradas.get(i).getEstado());
				au.setPropietarioInmueble(autoEncontradas.get(i)
						.getPropietarioInmueble());
				autorizacionEncontradas.add(au);
			}

		} catch (Exception e2) {
			FacesUtils.addErrorMessage(e2.getMessage());
		}
	}

	// METODO QUE UNE LA BUSQUEDA DE AUTORIZACIONES CON LOS RADIOS....
	public void action_buscar(ActionEvent e) {

		Usuario u = (Usuario) FacesUtils.getSession().getAttribute("usuario");
		if (u.getTipoUsuario().getTpuCodigo().equals("1")) {
			if (radioSelecionado.getValue().toString().equals("0")) {
				action_consultaPorNombre_y_Usuario(e);
			} else {
				action_consultaPorCedula_y_Usuario(e);
			}
		}
		// if (u.getTipoUsuario().equals("4")) {}
	}

	public String action_modifyWitDTO(String autCedVisitante, String autCodigo,
			String autDescripcionActi, String autDescripcionPermi,
			String autEmpresa, Date autFecha, String autNombreVisitante,
			String estCodigo_Estado, String priCodigo_PropietarioInmueble)
			throws Exception {
		try {
			BusinessDelegatorView.updateAutorizacion(autCedVisitante,
					autCodigo, autDescripcionActi, autDescripcionPermi,
					autEmpresa, autFecha, autNombreVisitante, estCodigo_Estado,
					priCodigo_PropietarioInmueble);
			renderManager.getOnDemandRenderer("AutorizacionView")
					.requestRender();
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
		} catch (Exception e) {
			// renderManager.getOnDemandRenderer("AutorizacionView").requestRender();
			FacesUtils.addErrorMessage(e.getMessage());
			throw e;
		}

		return "";
	}

	public List<Autorizacion> getAutorizacion() {
		if (flag) {
			try {
				autorizacion = BusinessDelegatorView.getAutorizacion();
				flag = false;
			} catch (Exception e) {
				flag = true;
				FacesUtils.addErrorMessage(e.getMessage());
			}
		}

		return autorizacion;
	}

	public boolean isFlag() {
		return flag;
	}

	public void setAutorizacion(List<Autorizacion> autorizacion) {
		this.autorizacion = autorizacion;
	}

	public boolean isRenderDataTable() {
		try {
			if (flag) {
				if (BusinessDelegatorView.findTotalNumberAutorizacion() > 0) {
					renderDataTable = true;
				} else {
					renderDataTable = false;
				}
			}

			flag = false;
		} catch (Exception e) {
			renderDataTable = false;
			e.printStackTrace();
		}

		return renderDataTable;
	}

	public DataModel getData() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModel(pageSize);
		}

		return onePageDataModel;
	}

	/**
	 * This is where the Object data is retrieved from the database and returned
	 * as a list of objects for display in the UI.
	 */
	private DataPage<Autorizacion> getDataPage(int startRow, int pageSize) {
		// Retrieve the total number of objects from the database. This
		// number is required by the DataPage object so the paginator will know
		// the relative location of the page data.
		int totalNumberAutorizacion = 0;

		try {
			totalNumberAutorizacion = BusinessDelegatorView
					.findTotalNumberAutorizacion().intValue();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Calculate indices to be displayed in the ui.
		int endIndex = startRow + pageSize;

		if (endIndex > totalNumberAutorizacion) {
			endIndex = totalNumberAutorizacion;
		}

		try {
			autorizacion = BusinessDelegatorView.findPageAutorizacion(
					sortColumnName, sortAscending, startRow, endIndex
							- startRow);

			// Remove this Renderable from the existing render groups.
			// leaveRenderGroups();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Add this Renderable to the new render groups.
		// joinRenderGroups();
		// Reset the dirtyData flag.
		onePageDataModel.setDirtyData(false);
		// This is required when using Hibernate. If the SessionManager is not
		// cleared or closed objects are cached and stale objects will show up
		// in the table.
		// This way, the detached objects are reread from the database.
		// This call is not required with Hibernate, which uses a Query Hint
		// to clear the l2 cache in the DAO.
		flag = true;

		return new DataPage<Autorizacion>(totalNumberAutorizacion, startRow,
				autorizacion);
	}

	public DataModel getDataDTO() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModelDTO(pageSize);
		}

		return onePageDataModel;
	}

	/**
	 * This is where the Object data is retrieved from the database and returned
	 * as a list of objects for display in the UI.
	 */
	private DataPage<AutorizacionDTO> getDataPageDTO(int startRow, int pageSize) {
		// Retrieve the total number of objects from the database. This
		// number is required by the DataPage object so the paginator will know
		// the relative location of the page data.
		int totalNumberAutorizacion = 0;

		try {
			totalNumberAutorizacion = BusinessDelegatorView
					.findTotalNumberAutorizacion().intValue();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Calculate indices to be displayed in the ui.
		int endIndex = startRow + pageSize;

		if (endIndex > totalNumberAutorizacion) {
			endIndex = totalNumberAutorizacion;
		}

		try {
			autorizacion = BusinessDelegatorView.findPageAutorizacion(
					sortColumnName, sortAscending, startRow, endIndex
							- startRow);

			if (Utilities.validationsList(autorizacion)) {
				autorizacionDTO = new ArrayList<AutorizacionDTO>();

				for (Autorizacion autorizacionTmp : autorizacion) {
					AutorizacionDTO autorizacionDTO2 = new AutorizacionDTO();
					autorizacionDTO2.setAutCodigo(autorizacionTmp
							.getAutCodigo().toString());
					autorizacionDTO2.setAutCedVisitante((autorizacionTmp
							.getAutCedVisitante() != null) ? autorizacionTmp
							.getAutCedVisitante().toString() : null);
					autorizacionDTO2.setAutDescripcionActi((autorizacionTmp
							.getAutDescripcionActi() != null) ? autorizacionTmp
							.getAutDescripcionActi().toString() : null);
					autorizacionDTO2
							.setAutDescripcionPermi((autorizacionTmp
									.getAutDescripcionPermi() != null) ? autorizacionTmp
									.getAutDescripcionPermi().toString()
									: null);
					autorizacionDTO2.setAutEmpresa((autorizacionTmp
							.getAutEmpresa() != null) ? autorizacionTmp
							.getAutEmpresa().toString() : null);
					autorizacionDTO2.setAutFecha(autorizacionTmp.getAutFecha());
					autorizacionDTO2.setAutNombreVisitante((autorizacionTmp
							.getAutNombreVisitante() != null) ? autorizacionTmp
							.getAutNombreVisitante().toString() : null);
					autorizacionDTO2
							.setEstCodigo_Estado((autorizacionTmp.getEstado()
									.getEstCodigo() != null) ? autorizacionTmp
									.getEstado().getEstCodigo().toString()
									: null);
					autorizacionDTO2
							.setPriCodigo_PropietarioInmueble((autorizacionTmp
									.getPropietarioInmueble().getPriCodigo() != null) ? autorizacionTmp
									.getPropietarioInmueble().getPriCodigo()
									.toString()
									: null);
					autorizacionDTO2.setAutorizacion(autorizacionTmp);
					autorizacionDTO2.setAutorizacionView(this);
					autorizacionDTO.add(autorizacionDTO2);
				}
			}

			// Remove this Renderable from the existing render groups.
			leaveRenderGroups();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Add this Renderable to the new render groups.
		joinRenderGroups();
		// Reset the dirtyData flag.
		onePageDataModel.setDirtyData(false);
		// This is required when using Hibernate. If the SessionManager is not
		// cleared or closed objects are cached and stale objects will show up
		// in the table.
		// This way, the detached objects are reread from the database.
		// This call is not required with Hibernate, which uses a Query Hint
		// to clear the l2 cache in the DAO.
		flag = true;

		return new DataPage<AutorizacionDTO>(totalNumberAutorizacion, startRow,
				autorizacionDTO);
	}

	protected boolean isDefaultAscending(String sortColumn) {
		return true;
	}

	/**
	 * This method is called when a render call is made from the server. Render
	 * calls are only made to views containing an updated record. The data is
	 * marked as dirty to trigger a fetch of the updated record from the
	 * database before rendering takes place.
	 */
	public PersistentFacesState getState() {
		onePageDataModel.setDirtyData();

		return state;
	}

	/**
	 * This method is called from faces-config.xml with each new session.
	 */
	public void setRenderManager(RenderManager renderManager) {
		this.renderManager = renderManager;
	}

	public void renderingException(RenderingException arg0) {
		if (arg0 instanceof TransientRenderingException) {
		} else if (arg0 instanceof FatalRenderingException) {
			// Remove from existing Customer render groups.
			leaveRenderGroups();
		}
	}

	/**
	 * Remove this Renderable from existing uiCustomerBeans render groups.
	 * OnDemandRenderers are named/created using the underlying Customer Number.
	 */
	private void leaveRenderGroups() {
		if (Utilities.validationsList(autorizacionDTO)) {
			for (AutorizacionDTO autorizacionTmp : autorizacionDTO) {
				renderManager.getOnDemandRenderer("AutorizacionView").remove(
						this);
			}
		}
	}

	/**
	 * Add this Renderable to the new uiCustomerBeans render groups.
	 * OnDemandRenderers are named/created using the underlying Customer Number.
	 */
	private void joinRenderGroups() {
		if (Utilities.validationsList(autorizacionDTO)) {
			for (AutorizacionDTO autorizacionTmp : autorizacionDTO) {
				renderManager.getOnDemandRenderer("AutorizacionView").add(this);
			}
		}
	}

	public void dispose() throws Exception {
	}

	public RenderManager getRenderManager() {
		return renderManager;
	}

	public HtmlSelectOneRadio getRadioSelecionado() {
		return radioSelecionado;
	}

	public void setRadioSelecionado(HtmlSelectOneRadio radioSelecionado) {
		this.radioSelecionado = radioSelecionado;
	}

	public Date getFechaActual() {
		return fechaActual;
	}

	public void setFechaActual(Date fechaActual) {
		this.fechaActual = fechaActual;
	}

	public List<Autorizacion> getAutorizacionEncontradas() {
		return autorizacionEncontradas;
	}

	public void setAutorizacionEncontradas(
			List<Autorizacion> autorizacionEncontradas) {
		this.autorizacionEncontradas = autorizacionEncontradas;
	}

	public HtmlInputText getTxtNombreConsulta() {
		return txtNombreConsulta;
	}

	public void setTxtNombreConsulta(HtmlInputText txtNombreConsulta) {
		this.txtNombreConsulta = txtNombreConsulta;
	}

	public HtmlCommandButton getBtnCambiarEstado() {
		return btnCambiarEstado;
	}

	public void setBtnCambiarEstado(HtmlCommandButton btnCambiarEstado) {
		this.btnCambiarEstado = btnCambiarEstado;
	}

	public void setState(PersistentFacesState state) {
		this.state = state;
	}

	public HtmlInputText getTxtAutCedVisitante() {
		return txtAutCedVisitante;
	}

	public void setTxtAutCedVisitante(HtmlInputText txtAutCedVisitante) {
		this.txtAutCedVisitante = txtAutCedVisitante;
	}

	public HtmlInputText getTxtAutDescripcionActi() {
		return txtAutDescripcionActi;
	}

	public void setTxtAutDescripcionActi(HtmlInputText txtAutDescripcionActi) {
		this.txtAutDescripcionActi = txtAutDescripcionActi;
	}

	public HtmlInputText getTxtAutDescripcionPermi() {
		return txtAutDescripcionPermi;
	}

	public void setTxtAutDescripcionPermi(HtmlInputText txtAutDescripcionPermi) {
		this.txtAutDescripcionPermi = txtAutDescripcionPermi;
	}

	// get y set del area de texto

	public HtmlInputText getTxtAutEmpresa() {
		return txtAutEmpresa;
	}

	public HtmlInputTextarea getAreaDescActi() {
		return areaDescActi;
	}

	public void setAreaDescActi(HtmlInputTextarea areaDescActi) {
		this.areaDescActi = areaDescActi;
	}

	public HtmlInputTextarea getAreaDescPerm() {
		return areaDescPerm;
	}

	public void setAreaDescPerm(HtmlInputTextarea areaDescPerm) {
		this.areaDescPerm = areaDescPerm;
	}

	public void setTxtAutEmpresa(HtmlInputText txtAutEmpresa) {
		this.txtAutEmpresa = txtAutEmpresa;
	}

	public HtmlInputText getTxtAutNombreVisitante() {
		return txtAutNombreVisitante;
	}

	public void setTxtAutNombreVisitante(HtmlInputText txtAutNombreVisitante) {
		this.txtAutNombreVisitante = txtAutNombreVisitante;
	}

	public HtmlInputText getTxtEstCodigo_Estado() {
		// txtEstCodigo_Estado.setValue("Activa");
		return txtEstCodigo_Estado;
	}

	public void setTxtEstCodigo_Estado(HtmlInputText txtEstCodigo_Estado) {
		this.txtEstCodigo_Estado = txtEstCodigo_Estado;
	}

	public HtmlInputText getTxtPriCodigo_PropietarioInmueble() {
		txtPriCodigo_PropietarioInmueble.setValue(FacesUtils.getSession()
				.getAttribute("codPro").toString());
		return txtPriCodigo_PropietarioInmueble;
	}

	public void setTxtPriCodigo_PropietarioInmueble(
			HtmlInputText txtPriCodigo_PropietarioInmueble) {
		this.txtPriCodigo_PropietarioInmueble = txtPriCodigo_PropietarioInmueble;
	}

	public SelectInputDate getTxtAutFecha() {
		return txtAutFecha;
	}

	public void setTxtAutFecha(SelectInputDate txtAutFecha) {
		this.txtAutFecha = txtAutFecha;
	}

	public HtmlInputText getTxtAutCodigo() {
		// txtAutCodigo.setValue(action_darProximoNumero());
		return txtAutCodigo;
	}

	public void setTxtAutCodigo(HtmlInputText txtAutCodigo) {
		this.txtAutCodigo = txtAutCodigo;
	}

	public HtmlCommandButton getBtnSave() {
		return btnSave;
	}

	public void setBtnSave(HtmlCommandButton btnSave) {
		this.btnSave = btnSave;
	}

	public HtmlCommandButton getBtnModify() {
		return btnModify;
	}

	public void setBtnModify(HtmlCommandButton btnModify) {
		this.btnModify = btnModify;
	}

	public HtmlCommandButton getBtnDelete() {
		return btnDelete;
	}

	public void setBtnDelete(HtmlCommandButton btnDelete) {
		this.btnDelete = btnDelete;
	}

	public HtmlCommandButton getBtnClear() {
		return btnClear;
	}

	public void setBtnClear(HtmlCommandButton btnClear) {
		this.btnClear = btnClear;
	}

	public void setRenderDataTable(boolean renderDataTable) {
		this.renderDataTable = renderDataTable;
	}

	public void setFlag(boolean flag) {
		this.flag = flag;
	}

	public List<AutorizacionDTO> getAutorizacionDTO() {
		return autorizacionDTO;
	}

	public void setAutorizacionDTO(List<AutorizacionDTO> autorizacionDTO) {
		this.autorizacionDTO = autorizacionDTO;
	}

	public TimeZone getTimeZone() {
		return java.util.TimeZone.getDefault();
	}

	/**
	 * A special type of JSF DataModel to allow a datatable and datapaginator to
	 * page through a large set of data without having to hold the entire set of
	 * data in memory at once. Any time a managed bean wants to avoid holding an
	 * entire dataset, the managed bean declares this inner class which extends
	 * PagedListDataModel and implements the fetchData method. fetchData is
	 * called as needed when the table requires data that isn't available in the
	 * current data page held by this object. This requires the managed bean
	 * (and in general the business method that the managed bean uses) to
	 * provide the data wrapped in a DataPage object that provides info on the
	 * full size of the dataset.
	 */
	private class LocalDataModel extends PagedListDataModel {
		public LocalDataModel(int pageSize) {
			super(pageSize);
		}

		public DataPage<Autorizacion> fetchPage(int startRow, int pageSize) {
			// call enclosing managed bean method to fetch the data
			return getDataPage(startRow, pageSize);
		}
	}

	private class LocalDataModelDTO extends PagedListDataModel {
		public LocalDataModelDTO(int pageSize) {
			super(pageSize);
		}

		public DataPage<AutorizacionDTO> fetchPage(int startRow, int pageSize) {
			// call enclosing managed bean method to fetch the data
			return getDataPageDTO(startRow, pageSize);
		}
	}
}